package org.fisco.bcos.asset.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Receipt extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506200002b62000031640100000000026401000000009004565b620001b2565b600061100190508073ffffffffffffffffffffffffffffffffffffffff166356004b6a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018060200180602001848103845260098152602001807f745f726563656970740000000000000000000000000000000000000000000000815250602001848103835260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001848103825260268152602001807f646562746f725f6163636f756e742c206465627465655f6163636f756e742c2081526020017f616d6f756e7400000000000000000000000000000000000000000000000000008152506040019350505050602060405180830381600087803b1580156200017157600080fd5b505af115801562000186573d6000803e3d6000fd5b505050506040513d60208110156200019d57600080fd5b81019080805190602001909291905050505050565b6166b980620001c26000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632b66d72e146100935780636eaf982f146101105780637a40a7831461026957806386ae4693146103b7578063b6c2c0df14610484578063bcd50204146105e0578063fcd7e3c1146106f3578063ff74927b14610777575b600080fd5b34801561009f57600080fd5b506100fa600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061089f565b6040518082815260200191505060405180910390f35b34801561011c57600080fd5b50610253600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061154a565b6040518082815260200191505060405180910390f35b34801561027557600080fd5b506102d0600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f52565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156103145780820151818401526020810190506102f9565b50505050905090810190601f1680156103415780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561037a57808201518184015260208101905061035f565b50505050905090810190601f1680156103a75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3480156103c357600080fd5b5061046e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050613b1b565b6040518082815260200191505060405180910390f35b34801561049057600080fd5b506104eb600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614c53565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561053b578082015181840152602081019050610520565b50505050905090810190601f1680156105685780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156105a1578082015181840152602081019050610586565b50505050905090810190601f1680156105ce5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156105ec57600080fd5b506106dd600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050615356565b6040518082815260200191505060405180910390f35b3480156106ff57600080fd5b5061075a600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050615be1565b604051808381526020018281526020019250505060405180910390f35b34801561078357600080fd5b50610824600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061604d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610864578082015181840152602081019050610849565b50505050905090810190601f1680156108915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008060008060008060006108b46001616094565b955060009450600093508573ffffffffffffffffffffffffffffffffffffffff1663e8434e39898873ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b505050506040513d602081101561096957600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015610a175780820151818401526020810190506109fc565b50505050905090810190601f168015610a445780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015610a6457600080fd5b505af1158015610a78573d6000803e3d6000fd5b505050506040513d6020811015610a8e57600080fd5b810190808051906020019092919050505092508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610b0557600080fd5b505af1158015610b19573d6000803e3d6000fd5b505050506040513d6020811015610b2f57600080fd5b810190808051906020019092919050505060001415610c17577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94507f4cea6a4612b8f37c496366ac8c4ef1d8b7d8c27568b3316b0045d99ba3d1b65585896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd4578082015181840152602081019050610bb9565b50505050905090810190601f168015610c015780820380516001836020036101000a031916815260200191505b50935050505060405180910390a184965061153f565b8273ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610c8757600080fd5b505af1158015610c9b573d6000803e3d6000fd5b505050506040513d6020811015610cb157600080fd5b810190808051906020019092919050505091506110098273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610da557600080fd5b810190808051640100000000811115610dbd57600080fd5b82810190506020810184811115610dd357600080fd5b8151856001820283011164010000000082111715610df057600080fd5b50509291905050508373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002","815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610ed657600080fd5b810190808051640100000000811115610eee57600080fd5b82810190506020810184811115610f0457600080fd5b8151856001820283011164010000000082111715610f2157600080fd5b50509291905050508473ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015610fc957600080fd5b505af1158015610fdd573d6000803e3d6000fd5b505050506040513d6020811015610ff357600080fd5b8101908080519060200190929190505050613b1b565b93507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd841415611102577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe94507f4cea6a4612b8f37c496366ac8c4ef1d8b7d8c27568b3316b0045d99ba3d1b65585896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156110bf5780820151818401526020810190506110a4565b50505050905090810190601f1680156110ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a184965061153f565b6000841415156111db577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd94507f4cea6a4612b8f37c496366ac8c4ef1d8b7d8c27568b3316b0045d99ba3d1b65585896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561119857808201518184015260208101905061117d565b50505050905090810190601f1680156111c55780820380516001836020036101000a031916815260200191505b50935050505060405180910390a184965061153f565b8573ffffffffffffffffffffffffffffffffffffffff166328bb2117898873ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b505050506040513d602081101561128657600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611334578082015181840152602081019050611319565b50505050905090810190601f1680156113615780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561138157600080fd5b505af1158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b81019080805190602001909291905050509050600181141515611497577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc94507f4cea6a4612b8f37c496366ac8c4ef1d8b7d8c27568b3316b0045d99ba3d1b65585896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611454578082015181840152602081019050611439565b50505050905090810190601f1680156114815780820380516001836020036101000a031916815260200191505b50935050505060405180910390a184965061153f565b7f4cea6a4612b8f37c496366ac8c4ef1d8b7d8c27568b3316b0045d99ba3d1b65585896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115005780820151818401526020810190506114e5565b50505050905090810190601f16801561152d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a18496505b505050505050919050565b60008060008060008060008060008097506000965060009550600094506115708d615be1565b809750819850505060008714151561176c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b83811015611623578082015181840152602081019050611608565b50505050905090810190601f1680156116505780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b8381101561168957808201518184015260208101905061166e565b50505050905090810190601f1680156116b65780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b838110156116ef5780820151818401526020810190506116d4565b50505050905090810190601f16801561171c5780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612f41565b6117758c615be1565b8096508198505050600087141515611971577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b8381101561182857808201518184015260208101905061180d565b50505050905090810190601f1680156118555780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b8381101561188e578082015181840152602081019050611873565b50505050905090810190601f1680156118bb5780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b838110156118f45780820151818401526020810190506118d9565b50505050905090810190601f1680156119215780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612f41565b61197b6001616094565b93508373ffffffffffffffffffffffffffffffffffffffff1663e8434e398f8673ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611ad6578082015181840152602081019050611abb565b50505050905090810190601f168015611b035780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b8101908080519060200190929190505050925060008373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b81019080805190602001909291905050501415611df1577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b83811015611ca8578082015181840152602081019050611c8d565b50505050905090810190601f168015611cd55780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b83811015611d0e578082015181840152602081019050611cf3565b50505050905090810190601f168015611d3b5780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b83811015611d74578082015181840152602081019050611d59565b50505050905090810190601f168015611da15780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612f41565b8273ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401","80828152602001915050602060405180830381600087803b158015611e6157600080fd5b505af1158015611e75573d6000803e3d6000fd5b505050506040513d6020811015611e8b57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611f7c57600080fd5b810190808051640100000000811115611f9457600080fd5b82810190506020810184811115611faa57600080fd5b8151856001820283011164010000000082111715611fc757600080fd5b50509291905050506040516020018082805190602001908083835b6020831015156120075780518252602082019150602081019050602083039250611fe2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515612070578051825260208201915060208101905060208303925061204b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019168d6040516020018082805190602001908083835b6020831015156120da57805182526020820191506020810190506020830392506120b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515612143578051825260208201915060208101905060208303925061211e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916141515612365577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b8381101561221c578082015181840152602081019050612201565b50505050905090810190601f1680156122495780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b83811015612282578082015181840152602081019050612267565b50505050905090810190601f1680156122af5780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b838110156122e85780820151818401526020810190506122cd565b50505050905090810190601f1680156123155780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612f41565b8a8273ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561240657600080fd5b505af115801561241a573d6000803e3d6000fd5b505050506040513d602081101561243057600080fd5b81019080805190602001909291905050501015612631577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b838110156124e85780820151818401526020810190506124cd565b50505050905090810190601f1680156125155780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b8381101561254e578082015181840152602081019050612533565b50505050905090810190601f16801561257b5780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b838110156125b4578082015181840152602081019050612599565b50505050905090810190601f1680156125e15780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612f41565b8173ffffffffffffffffffffffffffffffffffffffff16638a42ebe98c8473ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156126ee57600080fd5b505af1158015612702573d6000803e3d6000fd5b505050506040513d602081101561271857600080fd5b8101908080519060200190929190505050036040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825260068152602001807f616d6f756e74000000000000000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156127b557600080fd5b505af11580156127c9573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18f848773ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b505050506040513d602081101561287957600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b8381101561295957808201518184015260208101905061293e565b50505050905090810190601f1680156129865780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505050506040513d60208110156129d157600080fd5b81019080805190602001909291905050509050600181141515612c0c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa97507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f8f604051808781526020018060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b83811015612a90578082015181840152602081019050612a75565b50505050905090810190601f168015612abd5780820380516001836020036101000a031916815260200191505b50858103845289818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b50858103835288818151815260200191508051906020019080838360005b83811015612b5c578082015181840152602081019050612b41565b50505050905090810190601f168015612b895780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015612bc2578082015181840152602081019050612ba7565b50505050905090810190601f168015612bef5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a1879850612f41565b612d488a8373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015612cb057600080fd5b505af1158015612cc4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612cee57600080fd5b810190808051640100000000811115612d0657600080fd5b82810190506020810184811115612d1c57600080fd5b8151856001820283011164010000000082111715612d3957600080fd5b50509291905050508e8e615356565b96507f648039dcb887942454031f5f256944908a8463e0bcaaeb6b27e4d295df3e0f02888f8f8f8f8f604051808781526020018060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b83811015612dc9578082015181840152602081019050612dae565b50505050905090810190601f168015612df65780820380516001836020036101000a031916815260200191505b50858103845289818151815260200191508051906020019080838360005b83811015612e2f578082015181840152602081019050612e14565b50505050905090810190601f1680","15612e5c5780820380516001836020036101000a031916815260200191505b50858103835288818151815260200191508051906020019080838360005b83811015612e95578082015181840152602081019050612e7a565b50505050905090810190601f168015612ec25780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015612efb578082015181840152602081019050612ee0565b50505050905090810190601f168015612f285780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a18798505b505050505050505095945050505050565b606080600080600060606000806000806060600080612f716001616094565b9a508a73ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612fd757600080fd5b505af1158015612feb573d6000803e3d6000fd5b505050506040513d602081101561300157600080fd5b810190808051906020019092919050505099508973ffffffffffffffffffffffffffffffffffffffff1663cd30a1d18f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156130d45780820151818401526020810190506130b9565b50505050905090810190601f1680156131015780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663e8434e398b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825260028152602001807f696400000000000000000000000000000000000000000000000000000000000081525060200192505050602060405180830381600087803b15801561320d57600080fd5b505af1158015613221573d6000803e3d6000fd5b505050506040513d602081101561323757600080fd5b8101908080519060200190929190505050985060206040519081016040528060008152509750600096505b8873ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156132c657600080fd5b505af11580156132da573d6000803e3d6000fd5b505050506040513d60208110156132f057600080fd5b810190808051906020019092919050505087121561353c578873ffffffffffffffffffffffffffffffffffffffff1663846719e0886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561337757600080fd5b505af115801561338b573d6000803e3d6000fd5b505050506040513d60208110156133a157600080fd5b810190808051906020019092919050505095506133f3886040805190810160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525061604d565b975061352f888773ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001915050600060405180830381600087803b15801561349957600080fd5b505af11580156134ad573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156134d757600080fd5b8101908080516401000000008111156134ef57600080fd5b8281019050602081018481111561350557600080fd5b815185600182028301116401000000008211171561352257600080fd5b505092919050505061604d565b9750866001019650613262565b8a73ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b505050506040513d60208110156135ca57600080fd5b810190808051906020019092919050505094508473ffffffffffffffffffffffffffffffffffffffff1663cd30a1d18f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b8381101561369d578082015181840152602081019050613682565b50505050905090810190601f1680156136ca5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156136ea57600080fd5b505af11580156136fe573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663e8434e39866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825260028152602001807f696400000000000000000000000000000000000000000000000000000000000081525060200192505050602060405180830381600087803b1580156137d657600080fd5b505af11580156137ea573d6000803e3d6000fd5b505050506040513d602081101561380057600080fd5b8101908080519060200190929190505050935060206040519081016040528060008152509250600091505b8373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b505050506040513d60208110156138b957600080fd5b8101908080519060200190929190505050821215613b05578373ffffffffffffffffffffffffffffffffffffffff1663846719e0836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561394057600080fd5b505af1158015613954573d6000803e3d6000fd5b505050506040513d602081101561396a57600080fd5b810190808051906020019092919050505090506139bc836040805190810160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525061604d565b9250613af8838273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015613a6257600080fd5b505af1158015613a76573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015613aa057600080fd5b810190808051640100000000811115613ab857600080fd5b82810190506020810184811115613ace57600080fd5b8151856001820283011164010000000082111715613aeb57600080fd5b505092919050505061604d565b925081600101915061382b565b87839c509c505050505050505050505050915091565b6000806000806000806000806000809750600096506000955060009450613b418c615be1565b8097508198505050600087141515613c97577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97507fc629973ea1c2b10da25abb5277463f1044e102a14301d50988817530f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613beb578082015181840152602081019050613bd0565b50505050905090810190601f168015613c185780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613c51578082015181840152602081019050613c36565b50505050905090810190601f168015613c7e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c44565b613ca08b615be1565b8096508198505050600087141515613df6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe97507fc629973ea1c2b10da25abb5277463f1044e102a14301d50988817530f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613d4a578082015181840152602081019050613d2f565b50505050905090810190601f168015613d775780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613db0578082015181840152602081019050613d95565b50505050905090810190601f168015613ddd5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c44565b89861015613f42577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97507fc629973ea1c2b10da25abb5277463f1044e102a14301d509888175","30f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613e96578082015181840152602081019050613e7b565b50505050905090810190601f168015613ec35780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613efc578082015181840152602081019050613ee1565b50505050905090810190601f168015613f295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c44565b848a86011015614090577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc97507fc629973ea1c2b10da25abb5277463f1044e102a14301d50988817530f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613fe4578082015181840152602081019050613fc9565b50505050905090810190601f1680156140115780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561404a57808201518184015260208101905061402f565b50505050905090810190601f1680156140775780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c44565b61409a6000616094565b93508373ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561410057600080fd5b505af1158015614114573d6000803e3d6000fd5b505050506040513d602081101561412a57600080fd5b810190808051906020019092919050505092508273ffffffffffffffffffffffffffffffffffffffff1663e942b5168d6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260078152602001807f6163636f756e7400000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156141fd5780820151818401526020810190506141e2565b50505050905090810190601f16801561422a5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561424a57600080fd5b505af115801561425e573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff16632ef8ba748b88036040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018381526020018281038252600b8152602001807f61737365745f76616c756500000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b15801561430c57600080fd5b505af1158015614320573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18d858773ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156143a657600080fd5b505af11580156143ba573d6000803e3d6000fd5b505050506040513d60208110156143d057600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b838110156144b0578082015181840152602081019050614495565b50505050905090810190601f1680156144dd5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156144fe57600080fd5b505af1158015614512573d6000803e3d6000fd5b505050506040513d602081101561452857600080fd5b81019080805190602001909291905050509150600182141515614689577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb97507fc629973ea1c2b10da25abb5277463f1044e102a14301d50988817530f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156145dd5780820151818401526020810190506145c2565b50505050905090810190601f16801561460a5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015614643578082015181840152602081019050614628565b50505050905090810190601f1680156146705780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c44565b8373ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156146ed57600080fd5b505af1158015614701573d6000803e3d6000fd5b505050506040513d602081101561471757600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663e942b5168c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260078152602001807f6163636f756e7400000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156147ea5780820151818401526020810190506147cf565b50505050905090810190601f1680156148175780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561483757600080fd5b505af115801561484b573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba748b87016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018381526020018281038252600b8152602001807f61737365745f76616c756500000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156148f957600080fd5b505af115801561490d573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18c838773ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561499357600080fd5b505af11580156149a7573d6000803e3d6000fd5b505050506040513d60208110156149bd57600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b83811015614a9d578082015181840152602081019050614a82565b50505050905090810190601f168015614aca5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015614aeb57600080fd5b505af1158015614aff573d6000803e3d6000fd5b505050506040513d6020811015614b1557600080fd5b8101908080519060200190929190505050507fc629973ea1c2b10da25abb5277463f1044e102a14301d50988817530f92de04f888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015614b9c578082015181840152602081019050614b81565b50505050905090810190601f168015614bc95780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015614c02578082015181840152602081019050614be7565b50505050905090810190601f168015614c2f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18798505b50505050505050509392505050565b6000606080600080600080614c686001616094565b92508273ffffffffffffffffffffffffffffffffffffffff1663e8434e39898573ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614ceb57600080fd5b505af1158015614cff573d6000803e3d6000fd5b505050506040513d6020811015614d1557600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015614dc3578082015181840152602081019050614da8565b50505050905090810190601f168015614df05780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015614e1057600080fd5b505af1158015614e24573d6000803e3d6000fd5b505050506040513d6020811015614e3a57600080fd5b810190","808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614eb157600080fd5b505af1158015614ec5573d6000803e3d6000fd5b505050506040513d6020811015614edb57600080fd5b810190808051906020019092919050505060001415614f4e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000819150602060405190810160405280600081525090602060405190810160405280600081525090809050965096509650965061534c565b8173ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015614fbe57600080fd5b505af1158015614fd2573d6000803e3d6000fd5b505050506040513d6020811015614fe857600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b15801561509d57600080fd5b505af11580156150b1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156150db57600080fd5b8101908080516401000000008111156150f357600080fd5b8281019050602081018481111561510957600080fd5b815185600182028301116401000000008211171561512657600080fd5b50509291905050508273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b1580156151ce57600080fd5b505af11580156151e2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561520c57600080fd5b81019080805164010000000081111561522457600080fd5b8281019050602081018481111561523a57600080fd5b815185600182028301116401000000008211171561525757600080fd5b50509291905050508373ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156152ff57600080fd5b505af1158015615313573d6000803e3d6000fd5b505050506040513d602081101561532957600080fd5b810190808051906020019092919050505083935082925081915096509650965096505b5050509193509193565b600080600080600080600080955060009450600093506153758a615be1565b80955081965050506000851415156153af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9650615bd3565b6153b889615be1565b80955081965050506000851415156153f2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9650615bd3565b6153fc6001616094565b92508273ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561546257600080fd5b505af1158015615476573d6000803e3d6000fd5b505050506040513d602081101561548c57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b8381101561555f578082015181840152602081019050615544565b50505050905090810190601f16801561558c5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156155ac57600080fd5b505af11580156155c0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b83811015615684578082015181840152602081019050615669565b50505050905090810190601f1680156156b15780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156156d157600080fd5b505af11580156156e5573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156157a957808201518184015260208101905061578e565b50505050905090810190601f1680156157d65780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156157f657600080fd5b505af115801561580a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16638a42ebe9896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825260068152602001807f616d6f756e74000000000000000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156158b657600080fd5b505af11580156158ca573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166331afac368c846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561598957808201518184015260208101905061596e565b50505050905090810190601f1680156159b65780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156159d657600080fd5b505af11580156159ea573d6000803e3d6000fd5b505050506040513d6020811015615a0057600080fd5b810190808051906020019092919050505090506001811415615a255760009550615a49565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd95505b7fb780831ccda6f394a816ee44c806d7a35d7101ea08ca7a5d441cab5810df7f6e868c8c8c8c60405180868152602001806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b83811015615ac3578082015181840152602081019050615aa8565b50505050905090810190601f168015615af05780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b83811015615b29578082015181840152602081019050615b0e565b50505050905090810190601f168015615b565780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b83811015615b8f578082015181840152602081019050615b74565b50505050905090810190601f168015615bbc5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a18596505b505050505050949350505050565b600080600080600080615bf46000616094565b93508373ffffffffffffffffffffffffffffffffffffffff1663e8434e39888673ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015615c7757600080fd5b505af1158015615c8b573d6000803e3d6000fd5b505050506040513d6020811015615ca157600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015615d4f578082015181840152602081019050615d34565b50505050905090810190601f168015615d7c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015615d9c57600080fd5b505af1158015615db0573d6000803e3d6000fd5b505050506040513d6020811015615dc657600080fd5b81019080805190602001909291905050509250600091508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015615e415760","0080fd5b505af1158015615e55573d6000803e3d6000fd5b505050506040513d6020811015615e6b57600080fd5b810190808051906020019092919050505060001415615eb2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8281915095509550616044565b8273ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015615f2257600080fd5b505af1158015615f36573d6000803e3d6000fd5b505050506040513d6020811015615f4c57600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600b8152602001807f61737365745f76616c7565000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561600157600080fd5b505af1158015616015573d6000803e3d6000fd5b505050506040513d602081101561602b57600080fd5b8101908080519060200190929190505050819150955095505b50505050915091565b606061608c8383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250616278565b905092915050565b60008060008084141561618b5761100191508173ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260078152602001807f745f617373657400000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561614657600080fd5b505af115801561615a573d6000803e3d6000fd5b505050506040513d602081101561617057600080fd5b81019080805190602001909291905050509050809250616271565b61100191508173ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260098152602001807f745f726563656970740000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561623057600080fd5b505af1158015616244573d6000803e3d6000fd5b505050506040513d602081101561625a57600080fd5b810190808051906020019092919050505090508092505b5050919050565b6060806060806060806060806000808e98508d97508c96508b95508a94508451865188518a518c51010101016040519080825280601f01601f1916602001820160405280156162d65781602001602082028038833980820191505090505b50935083925060009150600090505b88518110156163985788818151811015156162fc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561635b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506162e5565b600090505b87518110156164505787818151811015156163b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561641357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061639d565b600090505b865181101561650857868181518110151561646c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156164cb57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050616455565b600090505b85518110156165c057858181518110151561652457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561658357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061650d565b600090505b84518110156166785784818151811015156165dc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561663b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506165c5565b829950505050505050505050959450505050505600a165627a7a72305820bf551b1ef877c1dcbb74de37877653581606d32412dbe4298d19ac02d77a3b830029"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506200002b62000031640100000000026401000000009004565b620001b2565b600061100190508073ffffffffffffffffffffffffffffffffffffffff1663c92a78016040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018060200180602001848103845260098152602001807f745f726563656970740000000000000000000000000000000000000000000000815250602001848103835260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001848103825260268152602001807f646562746f725f6163636f756e742c206465627465655f6163636f756e742c2081526020017f616d6f756e7400000000000000000000000000000000000000000000000000008152506040019350505050602060405180830381600087803b1580156200017157600080fd5b505af115801562000186573d6000803e3d6000fd5b505050506040513d60208110156200019d57600080fd5b81019080805190602001909291905050505050565b6166b980620001c26000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631a01e6991461009357806326c81966146101ef5780635b325d78146103485780635b8f3a4b146103cc5780635e2d8ea614610449578063a1d493eb14610571578063d93593ea1461063e578063ee7de86b14610751575b600080fd5b34801561009f57600080fd5b506100fa600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061089f565b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561014a57808201518184015260208101905061012f565b50505050905090810190601f1680156101775780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156101b0578082015181840152602081019050610195565b50505050905090810190601f1680156101dd5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156101fb57600080fd5b50610332600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610fa2565b6040518082815260200191505060405180910390f35b34801561035457600080fd5b506103af600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506129aa565b604051808381526020018281526020019250505060405180910390f35b3480156103d857600080fd5b50610433600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e16565b6040518082815260200191505060405180910390f35b34801561045557600080fd5b506104f6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613ac1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053657808201518184015260208101905061051b565b50505050905090810190601f1680156105635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561057d57600080fd5b50610628600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050613b08565b6040518082815260200191505060405180910390f35b34801561064a57600080fd5b5061073b600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050614c40565b6040518082815260200191505060405180910390f35b34801561075d57600080fd5b506107b8600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506154cb565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156107fc5780820151818401526020810190506107e1565b50505050905090810190601f1680156108295780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610862578082015181840152602081019050610847565b50505050905090810190601f16801561088f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b60006060806000806000806108b46001616094565b92508273ffffffffffffffffffffffffffffffffffffffff1663d8ac5957898573ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b505050506040513d602081101561096157600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015610a0f5780820151818401526020810190506109f4565b50505050905090810190601f168015610a3c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015610a5c57600080fd5b505af1158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610afd57600080fd5b505af1158015610b11573d6000803e3d6000fd5b505050506040513d6020811015610b2757600080fd5b810190808051906020019092919050505060001415610b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008191506020604051908101604052806000815250906020604051908101604052806000815250908090509650965096509650610f98565b8173ffffffffffffffffffffffffffffffffffffffff16633dd2b61460006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b505050506040513d6020811015610c3457600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015610ce957600080fd5b505af1158015610cfd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610d2757600080fd5b810190808051640100000000811115610d3f57600080fd5b82810190506020810184811115610d5557600080fd5b8151856001820283011164010000000082111715610d7257600080fd5b50509291905050508273ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015610e1a57600080fd5b505af1158015610e2e573d6000803e3d6000fd5b505050506040513d6000823e3d601f","19601f820116820180604052506020811015610e5857600080fd5b810190808051640100000000811115610e7057600080fd5b82810190506020810184811115610e8657600080fd5b8151856001820283011164010000000082111715610ea357600080fd5b50509291905050508373ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015610f4b57600080fd5b505af1158015610f5f573d6000803e3d6000fd5b505050506040513d6020811015610f7557600080fd5b810190808051906020019092919050505083935082925081915096509650965096505b5050509193509193565b6000806000806000806000806000809750600096506000955060009450610fc88d6129aa565b80975081985050506000871415156111c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b8381101561107b578082015181840152602081019050611060565b50505050905090810190601f1680156110a85780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b838110156110e15780820151818401526020810190506110c6565b50505050905090810190601f16801561110e5780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b8381101561114757808201518184015260208101905061112c565b50505050905090810190601f1680156111745780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612999565b6111cd8c6129aa565b80965081985050506000871415156113c9577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b83811015611280578082015181840152602081019050611265565b50505050905090810190601f1680156112ad5780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b838110156112e65780820151818401526020810190506112cb565b50505050905090810190601f1680156113135780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b8381101561134c578082015181840152602081019050611331565b50505050905090810190601f1680156113795780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612999565b6113d36001616094565b93508373ffffffffffffffffffffffffffffffffffffffff1663d8ac59578f8673ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d602081101561148057600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561152e578082015181840152602081019050611513565b50505050905090810190601f16801561155b5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561157b57600080fd5b505af115801561158f573d6000803e3d6000fd5b505050506040513d60208110156115a557600080fd5b8101908080519060200190929190505050925060008373ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b81019080805190602001909291905050501415611849577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b838110156117005780820151818401526020810190506116e5565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b8381101561176657808201518184015260208101905061174b565b50505050905090810190601f1680156117935780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b838110156117cc5780820151818401526020810190506117b1565b50505050905090810190601f1680156117f95780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612999565b8273ffffffffffffffffffffffffffffffffffffffff16633dd2b61460006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156118b957600080fd5b505af11580156118cd573d6000803e3d6000fd5b505050506040513d60208110156118e357600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b15801561199657600080fd5b505af11580156119aa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156119d457600080fd5b8101908080516401000000008111156119ec57600080fd5b82810190506020810184811115611a0257600080fd5b8151856001820283011164010000000082111715611a1f57600080fd5b50509291905050506040516020018082805190602001908083835b602083101515611a5f5780518252602082019150602081019050602083039250611a3a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515611ac85780518252602082019150602081019050602083039250611aa3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019168d6040516020018082805190602001908083835b602083101515611b325780518252602082019150602081019050602083039250611b0d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515611b9b5780518252602082019150602081019050602083039250611b76565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916141515611dbd577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b83811015611c74578082015181840152602081019050611c59565b50505050905090810190601f168015611ca15780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b83811015611cda578082015181840152602081019050611cbf565b50505050905090810190601f168015611d075780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b83811015611d40578082015181840152602081019050611d25565b50505050905090810190601f168015611d6d5780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612999565b8a8273ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e7400000000000000000000000000000000000000000000000000008152","50602001915050602060405180830381600087803b158015611e5e57600080fd5b505af1158015611e72573d6000803e3d6000fd5b505050506040513d6020811015611e8857600080fd5b81019080805190602001909291905050501015612089577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f6040518086815260200180602001806020018060200185815260200180602001858103855289818151815260200191508051906020019080838360005b83811015611f40578082015181840152602081019050611f25565b50505050905090810190601f168015611f6d5780820380516001836020036101000a031916815260200191505b50858103845288818151815260200191508051906020019080838360005b83811015611fa6578082015181840152602081019050611f8b565b50505050905090810190601f168015611fd35780820380516001836020036101000a031916815260200191505b50858103835287818151815260200191508051906020019080838360005b8381101561200c578082015181840152602081019050611ff1565b50505050905090810190601f1680156120395780820380516001836020036101000a031916815260200191505b50858103825260038152602001807f2d2d2d0000000000000000000000000000000000000000000000000000000000815250602001995050505050505050505060405180910390a1879850612999565b8173ffffffffffffffffffffffffffffffffffffffff1663f2f4ee6d8c8473ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561214657600080fd5b505af115801561215a573d6000803e3d6000fd5b505050506040513d602081101561217057600080fd5b8101908080519060200190929190505050036040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825260068152602001807f616d6f756e74000000000000000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b15801561220d57600080fd5b505af1158015612221573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663664b37d68f848773ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122a757600080fd5b505af11580156122bb573d6000803e3d6000fd5b505050506040513d60208110156122d157600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b838110156123b1578082015181840152602081019050612396565b50505050905090810190601f1680156123de5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b505050506040513d602081101561242957600080fd5b81019080805190602001909291905050509050600181141515612664577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa97507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f8f604051808781526020018060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b838110156124e85780820151818401526020810190506124cd565b50505050905090810190601f1680156125155780820380516001836020036101000a031916815260200191505b50858103845289818151815260200191508051906020019080838360005b8381101561254e578082015181840152602081019050612533565b50505050905090810190601f16801561257b5780820380516001836020036101000a031916815260200191505b50858103835288818151815260200191508051906020019080838360005b838110156125b4578082015181840152602081019050612599565b50505050905090810190601f1680156125e15780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b8381101561261a5780820151818401526020810190506125ff565b50505050905090810190601f1680156126475780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a1879850612999565b6127a08a8373ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b15801561270857600080fd5b505af115801561271c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561274657600080fd5b81019080805164010000000081111561275e57600080fd5b8281019050602081018481111561277457600080fd5b815185600182028301116401000000008211171561279157600080fd5b50509291905050508e8e614c40565b96507fe86c128fc416f49758b1190cf61705d05acc615c5dc60cb95aaac153e57b622c888f8f8f8f8f604051808781526020018060200180602001806020018681526020018060200185810385528a818151815260200191508051906020019080838360005b83811015612821578082015181840152602081019050612806565b50505050905090810190601f16801561284e5780820380516001836020036101000a031916815260200191505b50858103845289818151815260200191508051906020019080838360005b8381101561288757808201518184015260208101905061286c565b50505050905090810190601f1680156128b45780820380516001836020036101000a031916815260200191505b50858103835288818151815260200191508051906020019080838360005b838110156128ed5780820151818401526020810190506128d2565b50505050905090810190601f16801561291a5780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015612953578082015181840152602081019050612938565b50505050905090810190601f1680156129805780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a18798505b505050505050505095945050505050565b6000806000806000806129bd6000616094565b93508373ffffffffffffffffffffffffffffffffffffffff1663d8ac5957888673ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a4057600080fd5b505af1158015612a54573d6000803e3d6000fd5b505050506040513d6020811015612a6a57600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612b18578082015181840152602081019050612afd565b50505050905090810190601f168015612b455780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b505050506040513d6020811015612b8f57600080fd5b81019080805190602001909291905050509250600091508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612c0a57600080fd5b505af1158015612c1e573d6000803e3d6000fd5b505050506040513d6020811015612c3457600080fd5b810190808051906020019092919050505060001415612c7b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8281915095509550612e0d565b8273ffffffffffffffffffffffffffffffffffffffff16633dd2b61460006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b505050506040513d6020811015612d1557600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600b8152602001807f61737365745f76616c7565000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015612dca57600080fd5b505af1158015612dde573d6000803e3d6000fd5b505050506040513d6020811015612df457600080fd5b8101908080519060200190929190505050819150955095505b50505050915091565b6000806000806000806000612e2b6001616094565b955060009450600093508573ffffffffffff","ffffffffffffffffffffffffffff1663d8ac5957898873ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b505050506040513d6020811015612ee057600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612f8e578082015181840152602081019050612f73565b50505050905090810190601f168015612fbb5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015612fdb57600080fd5b505af1158015612fef573d6000803e3d6000fd5b505050506040513d602081101561300557600080fd5b810190808051906020019092919050505092508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b505050506040513d60208110156130a657600080fd5b81019080805190602001909291905050506000141561318e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94507ff29fbc08bdbc3232f83724edc377fb1e74b261c6d8dda82050171c4b4e7a465785896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561314b578082015181840152602081019050613130565b50505050905090810190601f1680156131785780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1849650613ab6565b8273ffffffffffffffffffffffffffffffffffffffff16633dd2b61460006040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156131fe57600080fd5b505af1158015613212573d6000803e3d6000fd5b505050506040513d602081101561322857600080fd5b810190808051906020019092919050505091506135808273ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b1580156132de57600080fd5b505af11580156132f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561331c57600080fd5b81019080805164010000000081111561333457600080fd5b8281019050602081018481111561334a57600080fd5b815185600182028301116401000000008211171561336757600080fd5b50509291905050508373ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001915050600060405180830381600087803b15801561340f57600080fd5b505af1158015613423573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561344d57600080fd5b81019080805164010000000081111561346557600080fd5b8281019050602081018481111561347b57600080fd5b815185600182028301116401000000008211171561349857600080fd5b50509291905050508473ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260068152602001807f616d6f756e740000000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561354057600080fd5b505af1158015613554573d6000803e3d6000fd5b505050506040513d602081101561356a57600080fd5b8101908080519060200190929190505050613b08565b93507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd841415613679577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe94507ff29fbc08bdbc3232f83724edc377fb1e74b261c6d8dda82050171c4b4e7a465785896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561363657808201518184015260208101905061361b565b50505050905090810190601f1680156136635780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1849650613ab6565b600084141515613752577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd94507ff29fbc08bdbc3232f83724edc377fb1e74b261c6d8dda82050171c4b4e7a465785896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561370f5780820151818401526020810190506136f4565b50505050905090810190601f16801561373c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1849650613ab6565b8573ffffffffffffffffffffffffffffffffffffffff166309ff42f0898873ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156137d357600080fd5b505af11580156137e7573d6000803e3d6000fd5b505050506040513d60208110156137fd57600080fd5b81019080805190602001909291905050506040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156138ab578082015181840152602081019050613890565b50505050905090810190601f1680156138d85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b505050506040513d602081101561392257600080fd5b81019080805190602001909291905050509050600181141515613a0e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc94507ff29fbc08bdbc3232f83724edc377fb1e74b261c6d8dda82050171c4b4e7a465785896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139cb5780820151818401526020810190506139b0565b50505050905090810190601f1680156139f85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1849650613ab6565b7ff29fbc08bdbc3232f83724edc377fb1e74b261c6d8dda82050171c4b4e7a465785896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a77578082015181840152602081019050613a5c565b50505050905090810190601f168015613aa45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a18496505b505050505050919050565b6060613b008383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250616278565b905092915050565b6000806000806000806000806000809750600096506000955060009450613b2e8c6129aa565b8097508198505050600087141515613c84577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613bd8578082015181840152602081019050613bbd565b50505050905090810190601f168015613c055780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613c3e578082015181840152602081019050613c23565b50505050905090810190601f168015613c6b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c31565b613c8d8b6129aa565b8096508198505050600087141515613de3577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe97507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613d37578082015181840152602081019050613d1c565b50505050905090810190601f168015613d645780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613d9d578082015181840152602081019050613d82565b50505050905090810190601f168015613dca5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c31565b89861015613f2f577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd97507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d60405180858152602001","8060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613e83578082015181840152602081019050613e68565b50505050905090810190601f168015613eb05780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015613ee9578082015181840152602081019050613ece565b50505050905090810190601f168015613f165780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c31565b848a8601101561407d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc97507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015613fd1578082015181840152602081019050613fb6565b50505050905090810190601f168015613ffe5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561403757808201518184015260208101905061401c565b50505050905090810190601f1680156140645780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c31565b6140876000616094565b93508373ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b505050506040513d602081101561411757600080fd5b810190808051906020019092919050505092508273ffffffffffffffffffffffffffffffffffffffff16631a391cb48d6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260078152602001807f6163636f756e7400000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156141ea5780820151818401526020810190506141cf565b50505050905090810190601f1680156142175780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561423757600080fd5b505af115801561424b573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663def426988b88036040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018381526020018281038252600b8152602001807f61737365745f76616c756500000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156142f957600080fd5b505af115801561430d573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663664b37d68d858773ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561439357600080fd5b505af11580156143a7573d6000803e3d6000fd5b505050506040513d60208110156143bd57600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b8381101561449d578082015181840152602081019050614482565b50505050905090810190601f1680156144ca5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156144eb57600080fd5b505af11580156144ff573d6000803e3d6000fd5b505050506040513d602081101561451557600080fd5b81019080805190602001909291905050509150600182141515614676577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb97507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156145ca5780820151818401526020810190506145af565b50505050905090810190601f1680156145f75780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015614630578082015181840152602081019050614615565b50505050905090810190601f16801561465d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1879850614c31565b8373ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156146da57600080fd5b505af11580156146ee573d6000803e3d6000fd5b505050506040513d602081101561470457600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16631a391cb48c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260078152602001807f6163636f756e7400000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b838110156147d75780820151818401526020810190506147bc565b50505050905090810190601f1680156148045780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561482457600080fd5b505af1158015614838573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663def426988b87016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018381526020018281038252600b8152602001807f61737365745f76616c756500000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156148e657600080fd5b505af11580156148fa573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663664b37d68c838773ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561498057600080fd5b505af1158015614994573d6000803e3d6000fd5b505050506040513d60208110156149aa57600080fd5b81019080805190602001909291905050506040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019080838360005b83811015614a8a578082015181840152602081019050614a6f565b50505050905090810190601f168015614ab75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015614ad857600080fd5b505af1158015614aec573d6000803e3d6000fd5b505050506040513d6020811015614b0257600080fd5b8101908080519060200190929190505050507fa96a512bcb04425f0912c111dfae0ef4b7880bbd01ec26e20771fd82e2999290888d8d8d604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015614b89578082015181840152602081019050614b6e565b50505050905090810190601f168015614bb65780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015614bef578082015181840152602081019050614bd4565b50505050905090810190601f168015614c1c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18798505b50505050505050509392505050565b60008060008060008060008095506000945060009350614c5f8a6129aa565b8095508196505050600085141515614c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96506154bd565b614ca2896129aa565b8095508196505050600085141515614cdc577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe96506154bd565b614ce66001616094565b92508273ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614d4c57600080fd5b505af1158015614d60573d6000803e3d6000fd5b505050506040513d6020811015614d7657600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b83811015614e495780820151818401","52602081019050614e2e565b50505050905090810190601f168015614e765780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015614e9657600080fd5b505af1158015614eaa573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b83811015614f6e578082015181840152602081019050614f53565b50505050905090810190601f168015614f9b5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015614fbb57600080fd5b505af1158015614fcf573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b83811015615093578082015181840152602081019050615078565b50505050905090810190601f1680156150c05780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156150e057600080fd5b505af11580156150f4573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663f2f4ee6d896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825260068152602001807f616d6f756e74000000000000000000000000000000000000000000000000000081525060200192505050600060405180830381600087803b1580156151a057600080fd5b505af11580156151b4573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff16634c6f30c08c846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015615273578082015181840152602081019050615258565b50505050905090810190601f1680156152a05780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156152c057600080fd5b505af11580156152d4573d6000803e3d6000fd5b505050506040513d60208110156152ea57600080fd5b81019080805190602001909291905050509050600181141561530f5760009550615333565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd95505b7f49f7dd463e509a488009d3071ee7e01cc25f81aa26050798907fbd71548a613d868c8c8c8c60405180868152602001806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b838110156153ad578082015181840152602081019050615392565b50505050905090810190601f1680156153da5780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b838110156154135780820151818401526020810190506153f8565b50505050905090810190601f1680156154405780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b8381101561547957808201518184015260208101905061545e565b50505050905090810190601f1680156154a65780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a18596505b505050505050949350505050565b6060806000806000606060008060008060606000806154ea6001616094565b9a508a73ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561555057600080fd5b505af1158015615564573d6000803e3d6000fd5b505050506040513d602081101561557a57600080fd5b810190808051906020019092919050505099508973ffffffffffffffffffffffffffffffffffffffff1663ae763db58f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f646562746f725f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b8381101561564d578082015181840152602081019050615632565b50505050905090810190601f16801561567a5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561569a57600080fd5b505af11580156156ae573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663d8ac59578b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825260028152602001807f696400000000000000000000000000000000000000000000000000000000000081525060200192505050602060405180830381600087803b15801561578657600080fd5b505af115801561579a573d6000803e3d6000fd5b505050506040513d60208110156157b057600080fd5b8101908080519060200190929190505050985060206040519081016040528060008152509750600096505b8873ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561583f57600080fd5b505af1158015615853573d6000803e3d6000fd5b505050506040513d602081101561586957600080fd5b8101908080519060200190929190505050871215615ab5578873ffffffffffffffffffffffffffffffffffffffff16633dd2b614886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156158f057600080fd5b505af1158015615904573d6000803e3d6000fd5b505050506040513d602081101561591a57600080fd5b8101908080519060200190929190505050955061596c886040805190810160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250613ac1565b9750615aa8888773ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015615a1257600080fd5b505af1158015615a26573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015615a5057600080fd5b810190808051640100000000811115615a6857600080fd5b82810190506020810184811115615a7e57600080fd5b8151856001820283011164010000000082111715615a9b57600080fd5b5050929190505050613ac1565b97508660010196506157db565b8a73ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015615b1957600080fd5b505af1158015615b2d573d6000803e3d6000fd5b505050506040513d6020811015615b4357600080fd5b810190808051906020019092919050505094508473ffffffffffffffffffffffffffffffffffffffff1663ae763db58f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001806020018381038352600e8152602001807f6465627465655f6163636f756e74000000000000000000000000000000000000815250602001838103825284818151815260200191508051906020019080838360005b83811015615c16578082015181840152602081019050615bfb565b50505050905090810190601f168015615c435780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015615c6357600080fd5b505af1158015615c77573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663d8ac5957866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825260028152602001807f696400000000000000000000000000000000000000000000000000000000000081525060200192505050602060405180830381600087803b158015615d4f57600080fd5b505af1158015615d63573d6000803e3d6000fd5b505050506040513d6020811015615d7957600080fd5b8101908080519060200190929190505050935060206040519081016040528060008152509250600091505b8373ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015615e0857600080fd5b505af1158015615e1c573d6000803e3d6000fd5b505050506040513d6020811015615e3257600080fd5b8101908080519060200190","92919050505082121561607e578373ffffffffffffffffffffffffffffffffffffffff16633dd2b614836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015615eb957600080fd5b505af1158015615ecd573d6000803e3d6000fd5b505050506040513d6020811015615ee357600080fd5b81019080805190602001909291905050509050615f35836040805190810160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250613ac1565b9250616071838273ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260028152602001807f6964000000000000000000000000000000000000000000000000000000000000815250602001915050600060405180830381600087803b158015615fdb57600080fd5b505af1158015615fef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561601957600080fd5b81019080805164010000000081111561603157600080fd5b8281019050602081018481111561604757600080fd5b815185600182028301116401000000008211171561606457600080fd5b5050929190505050613ac1565b9250816001019150615da4565b87839c509c505050505050505050505050915091565b60008060008084141561618b5761100191508173ffffffffffffffffffffffffffffffffffffffff166359a48b656040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260078152602001807f745f617373657400000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561614657600080fd5b505af115801561615a573d6000803e3d6000fd5b505050506040513d602081101561617057600080fd5b81019080805190602001909291905050509050809250616271565b61100191508173ffffffffffffffffffffffffffffffffffffffff166359a48b656040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260098152602001807f745f726563656970740000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561623057600080fd5b505af1158015616244573d6000803e3d6000fd5b505050506040513d602081101561625a57600080fd5b810190808051906020019092919050505090508092505b5050919050565b6060806060806060806060806000808e98508d97508c96508b95508a94508451865188518a518c51010101016040519080825280601f01601f1916602001820160405280156162d65781602001602082028038833980820191505090505b50935083925060009150600090505b88518110156163985788818151811015156162fc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561635b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506162e5565b600090505b87518110156164505787818151811015156163b457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561641357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061639d565b600090505b865181101561650857868181518110151561646c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156164cb57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050616455565b600090505b85518110156165c057858181518110151561652457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561658357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061650d565b600090505b84518110156166785784818151811015156165dc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561663b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506165c5565b829950505050505050505050959450505050505600a165627a7a723058204433c2003074307cbb3846cd5ec3cd8cbdb13e2e0c257329757ecfbedcef4cbd0029"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"pay\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"from_account\",\"type\":\"string\"},{\"name\":\"to_account\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"id_new\",\"type\":\"string\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"string\"}],\"name\":\"selectAccountName\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from_account\",\"type\":\"string\"},{\"name\":\"to_account\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer_\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"select_\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"debtor_account\",\"type\":\"string\"},{\"name\":\"debtee_account\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"make\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"string\"}],\"name\":\"select\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_a\",\"type\":\"string\"},{\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"strConcat\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"debtor_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"debtee_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MakeEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"from_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"to_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"id_new\",\"type\":\"string\"}],\"name\":\"TransferEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"from_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"to_account\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferEvent_\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"ret\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"receipt_id\",\"type\":\"string\"}],\"name\":\"PayEvent\",\"type\":\"event\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_PAY = "pay";

    public static final String FUNC_TRANSFER = "transfer";

    public static final String FUNC_SELECTACCOUNTNAME = "selectAccountName";

    public static final String FUNC_TRANSFER_ = "transfer_";

    public static final String FUNC_SELECT_ = "select_";

    public static final String FUNC_MAKE = "make";

    public static final String FUNC_SELECT = "select";

    public static final String FUNC_STRCONCAT = "strConcat";

    public static final Event MAKEEVENT_EVENT = new Event("MakeEvent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event TRANSFEREVENT_EVENT = new Event("TransferEvent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event TRANSFEREVENT__EVENT = new Event("TransferEvent_", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event PAYEVENT_EVENT = new Event("PayEvent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    protected Receipt(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt pay(String id) {
        final Function function = new Function(
                FUNC_PAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void pay(String id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_PAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForPay(String id) {
        final Function function = new Function(
                FUNC_PAY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getPayInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_PAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple1<BigInteger> getPayOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_PAY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt transfer(String id, String from_account, String to_account, BigInteger amount, String id_new) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id_new)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void transfer(String id, String from_account, String to_account, BigInteger amount, String id_new, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id_new)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransfer(String id, String from_account, String to_account, BigInteger amount, String id_new) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id_new)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<String, String, String, BigInteger, String> getTransferInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<String, String, String, BigInteger, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue(), 
                (String) results.get(4).getValue()
                );
    }

    public Tuple1<BigInteger> getTransferOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_TRANSFER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public Tuple2<String, String> selectAccountName(String account) throws ContractException {
        final Function function = new Function(FUNC_SELECTACCOUNTNAME, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(account)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue());
    }

    public TransactionReceipt transfer_(String from_account, String to_account, BigInteger amount) {
        final Function function = new Function(
                FUNC_TRANSFER_, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void transfer_(String from_account, String to_account, BigInteger amount, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFER_, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransfer_(String from_account, String to_account, BigInteger amount) {
        final Function function = new Function(
                FUNC_TRANSFER_, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(from_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(to_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, BigInteger> getTransfer_Input(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFER_, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, BigInteger>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue()
                );
    }

    public Tuple1<BigInteger> getTransfer_Output(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_TRANSFER_, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public Tuple4<BigInteger, String, String, BigInteger> select_(String id) throws ContractException {
        final Function function = new Function(FUNC_SELECT_, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<BigInteger, String, String, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue());
    }

    public TransactionReceipt make(String id, String debtor_account, String debtee_account, BigInteger amount) {
        final Function function = new Function(
                FUNC_MAKE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtor_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtee_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void make(String id, String debtor_account, String debtee_account, BigInteger amount, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_MAKE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtor_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtee_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForMake(String id, String debtor_account, String debtee_account, BigInteger amount) {
        final Function function = new Function(
                FUNC_MAKE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(id), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtor_account), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(debtee_account), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, String, BigInteger> getMakeInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_MAKE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, String, BigInteger>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getMakeOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_MAKE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public Tuple2<BigInteger, BigInteger> select(String account) throws ContractException {
        final Function function = new Function(FUNC_SELECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(account)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue());
    }

    public String strConcat(String _a, String _b) throws ContractException {
        final Function function = new Function(FUNC_STRCONCAT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_a), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_b)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public List<MakeEventEventResponse> getMakeEventEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(MAKEEVENT_EVENT, transactionReceipt);
        ArrayList<MakeEventEventResponse> responses = new ArrayList<MakeEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            MakeEventEventResponse typedResponse = new MakeEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.debtor_account = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.debtee_account = (String) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeMakeEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(MAKEEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeMakeEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(MAKEEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<TransferEventEventResponse> getTransferEventEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFEREVENT_EVENT, transactionReceipt);
        ArrayList<TransferEventEventResponse> responses = new ArrayList<TransferEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            TransferEventEventResponse typedResponse = new TransferEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.from_account = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.to_account = (String) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.id_new = (String) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransferEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFEREVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransferEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFEREVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<TransferEvent_EventResponse> getTransferEvent_Events(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFEREVENT__EVENT, transactionReceipt);
        ArrayList<TransferEvent_EventResponse> responses = new ArrayList<TransferEvent_EventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            TransferEvent_EventResponse typedResponse = new TransferEvent_EventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.from_account = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.to_account = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransferEvent_Event(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFEREVENT__EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransferEvent_Event(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFEREVENT__EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<PayEventEventResponse> getPayEventEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PAYEVENT_EVENT, transactionReceipt);
        ArrayList<PayEventEventResponse> responses = new ArrayList<PayEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            PayEventEventResponse typedResponse = new PayEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.ret = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.receipt_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribePayEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PAYEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribePayEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PAYEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static Receipt load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Receipt(contractAddress, client, credential);
    }

    public static Receipt deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(Receipt.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class MakeEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret;

        public String id;

        public String debtor_account;

        public String debtee_account;

        public BigInteger amount;
    }

    public static class TransferEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret;

        public String id;

        public String from_account;

        public String to_account;

        public BigInteger amount;

        public String id_new;
    }

    public static class TransferEvent_EventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret;

        public String from_account;

        public String to_account;

        public BigInteger amount;
    }

    public static class PayEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger ret;

        public String receipt_id;
    }
}
